【小ネタ】「Snowflake Scripting」で記述したプロシージャをPython Connectorで登録してみた
こんにちは!DA(データアナリティクス)事業本部 サービスソリューション部の大高です。
先日、Snowflakeでプレビューリリースされた新しいSnowflake SQLのプロシージャ用拡張機能「Snowflake Scripting」についてエントリーを書きました。
このエントリで、記載したとおり「SnowSQL(CLI経由)」の場合と「従来のウェブインターフェイス」の場合にはSnowflakeスクリプトのブロックを「一重引用符または二重ドル記号」で囲む必要がありました。
一方で、「Python Connectorを利用する場合にはどうしたら良いのか?」というのが気になったので実際に試してみました。
検証用コード
検証用コードとしては、以下のエントリで作成したクエリを実行するコードをそのまま利用します。
追加修正したポイントとしては以下の通りです。
if __name__ == "__main__": zeller_file_path = 'sql/zeller.sql' exec_async_query(zeller_file_path) call_file_path = 'sql/call.sql' exec_async_query(call_file_path)
プロシージャを作成するクエリファイルsql/zeller.sql
と、プロシージャを実行するクエリファイルsql/call.sql
を指定して実行するようにしました。
create or replace procedure zeller() returns number(1,0) language sql as declare year number(4,0); month number(2,0); day number(2,0); w number; x number(1,0); begin year := 2022; month := 1; day := 25; if (month <= 2) then year := year - 1; month := month + 10; else month := month - 2; end if; w := day + ((13 * month - 1) / 5)::integer + year + (year / 4)::integer - (year / 100)::integer + (year / 400)::integer; x := w % 7; return x; end;
ストアドプロシージャを作成するクエリです。こちらのクエリでは「一重引用符または二重ドル記号」でスクリプトブロックを囲んでいません。
call zeller();
ストアドプロシージャを呼び出すクエリです。単純にcall
で呼んでいるだけですね。
実行してみる
実際に実行した結果がこちらです。
$ python procedure.py async query executed. waiting query results... recieved query results. query result: [{'status': '関数 ZELLER が正常に作成されました。'}] async query executed. waiting query results... recieved query results. query result: [{'ZELLER': 2}]
問題なく作成されており、実行にも成功しています!
まとめ
以上、「Snowflake Scripting」で記述したプロシージャをPython Connectorで登録してみました。
当初はSnowSQLと同じ扱いになりそうなので「一重引用符または二重ドル記号」でスクリプトブロックを囲んであげないとエラーになるのかな?と思っていたのですが、意外にそのまま問題なく実行できました。個人的には「一重引用符または二重ドル記号」を書かないほうが好みなので、嬉しかったです。
どなたかのお役に立てば幸いです。それでは!